package com.lecture.java8.stream;

import com.lecture.java8.lambda.entity.User;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;

/**
 * @program: spring-lecture
 * @description: 终止操作
 * @author: luyn
 * @create: 2020-03-28 17:13
 **/
public class TestStream1 {

    List<User> userList = Arrays.asList(
            new User(1, "张三", 13),
            new User(2, "李四", 72),
            new User(3, "王五", 16),
            new User(4, "赵六", 31),
            new User(5, "薛七", 53)
    );
    /**
     * 查找与匹配
     * allMatch--检查是否匹配所有元素
     * anyMatch--检查是否至少匹配一个元素
     * noneMatch--检查是否没有匹配所有元素
     * findFirst--返回第一个元素
     * findAny--返回当前流中的任意元素
     * count--返回流中元素的总个数
     * max--返回流中最大值
     * min--返回流中最小值
     */
    public void test1() {
        User user = userList.stream()
                .min(Comparator.comparingInt(User::getAge))
                .orElse(new User());

        boolean a = userList.stream()
                .allMatch((s) -> s.getName().equals("张三"));
        System.out.println(a);

    }

    /**
     * 规约 通过map将元素提取出来，使用reduce将元素组装起来
     * reduce(T iden, )可以将流中元素反复结合起来，得到一个值，返回T
     * reduce()可以将流中元素反复结合起来，得到一个新值。返回Optional<T>
     */
    public void test2() {
        Integer reduce = userList.stream()
                .map(User::getAge)
                .reduce(0, (x, y) -> x + y);

        Optional<String> reduce1 = userList.stream()
                .map(User::getName)
                .reduce((x, y) -> x + y);
        System.out.println(reduce1.get());
    }

    public static void main(String[] args) {
        TestStream1 testStream1 = new TestStream1();
        //testStream1.test2();
        int i = 0;
        if(i == 0)
            System.out.println("true");
        System.out.println("false");
        if(i != 0)
            System.out.println("false");
    }
}
